package cn.iocoder.yudao.module.eval.service.template;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.eval.controller.admin.template.vo.EvalTemplatePageReqVO;
import cn.iocoder.yudao.module.eval.controller.admin.template.vo.EvalTemplateSaveReqVO;
import cn.iocoder.yudao.module.eval.dal.dataobject.template.EvalTemplateDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 评价模板 Service 接口
 *
 * @author 芋道源码
 */
public interface EvalTemplateService {

    /**
     * 创建评价模板
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createTemplate(@Valid EvalTemplateSaveReqVO createReqVO);

    /**
     * 更新评价模板
     *
     * @param updateReqVO 更新信息
     */
    void updateTemplate(@Valid EvalTemplateSaveReqVO updateReqVO);

    /**
     * 删除评价模板
     *
     * @param id 编号
     */
    void deleteTemplate(Long id);

    /**
     * 获得评价模板
     *
     * @param id 编号
     * @return 评价模板
     */
    EvalTemplateDO getTemplate(Long id);

    /**
     * 获得评价模板列表
     *
     * @param ids 编号
     * @return 评价模板列表
     */
    List<EvalTemplateDO> getTemplateList(Collection<Long> ids);

    /**
     * 获得评价模板分页
     *
     * @param pageReqVO 分页查询
     * @return 评价模板分页
     */
    PageResult<EvalTemplateDO> getTemplatePage(EvalTemplatePageReqVO pageReqVO);

    /**
     * 根据模板编码获得评价模板
     *
     * @param templateCode 模板编码
     * @return 评价模板
     */
    EvalTemplateDO getTemplateByCode(String templateCode);

    /**
     * 根据方式类型ID获得模板列表
     *
     * @param methodTypeId 方式类型ID
     * @return 模板列表
     */
    List<EvalTemplateDO> getTemplateListByMethodTypeId(Long methodTypeId);

    /**
     * 根据适用职业和模板类型获得模板列表
     *
     * @param profession 适用职业
     * @param templateType 模板类型
     * @return 模板列表
     */
    List<EvalTemplateDO> getTemplateListByProfessionAndType(String profession, Integer templateType);

    /**
     * 发布模板
     *
     * @param id 编号
     */
    void publishTemplate(Long id);

    /**
     * 停用模板
     *
     * @param id 编号
     */
    void disableTemplate(Long id);

    /**
     * 复制模板
     *
     * @param id 原模板编号
     * @param newTemplateCode 新模板编码
     * @param newTemplateName 新模板名称
     * @return 新模板编号
     */
    Long copyTemplate(Long id, String newTemplateCode, String newTemplateName);

    /**
     * 设置默认模板
     *
     * @param id 编号
     * @param profession 适用职业
     * @param templateType 模板类型
     */
    void setDefaultTemplate(Long id, String profession, Integer templateType);

    /**
     * 获取已发布的评价模板列表
     *
     * @return 已发布的评价模板列表
     */
    List<EvalTemplateDO> getPublishedTemplateList();

}
